zabbix的snmp监控

        在添加主机的时候,可以看到四种方式。一种是Agent,一种是IPMI,一种是JMX(监控KVM的),还有一个就是SNMP。关于SNMP这种监控方式,即可以用在主机上,另外就是用在路由器和交换机以及网络打印机这种没有办法安装agent客户端的网络设备上。对于主机来说能用agent监控的尽量还是使用agent监控,这是一种最佳实践。

使用SNMP监控主机

        这里以监控192.168.1.150为例子

1
2
yum -y install net-snmp net-snmp-utils net-snmp-devel
systemctl start snmpd

        修改SNMP的配置文件

1
vim /etc/snmp/snmpd.conf
1
2
3
4
5
6
7
view systemview included .1.3.6.1.2.1.25.1.1 //找到这行,增加下面配置
view systemview included .1 // 这个是新增加的
proc mountd // 找到这些配置,把注释去掉
proc ntalkd 4
proc sendmail 10 1
disk / 10000
load 12 14 14

        修改完以后重启snmp

1
systemctl restart snmpd

        然后通过snmpwalk来获取数据进行测试

        比如查看系统负载

1
2
3
4
5
6
7
8
[root@aliyun-test ~]# snmpwalk -v2c -c public 116.62.172.73 .1.3.6.1.4.1.2021.10.1.3.1
UCD-SNMP-MIB::laLoad.1 = STRING: 0.02
[root@aliyun-test ~]# snmpwalk -v2c -c public 116.62.172.73 .1.3.6.1.4.1.2021.10.1.3.2
UCD-SNMP-MIB::laLoad.2 = STRING: 0.04
[root@aliyun-test ~]# snmpwalk -v2c -c public 116.62.172.73 .1.3.6.1.4.1.2021.10.1.3.3
UCD-SNMP-MIB::laLoad.3 = STRING: 0.05
[root@aliyun-test ~]# uptime
17:54:15 up 6 days, 8:47, 1 user, load average: 0.01, 0.04, 0.05

        查看内存的使用情况

1
2
3
4
[root@aliyun-test ~]# snmpwalk -v2c -c public 116.62.172.73 .1.3.6.1.4.1.2021.4.11.0
UCD-SNMP-MIB::memTotalFree.0 = INTEGER: 83980 kB
[root@aliyun-test ~]# snmpwalk -v2c -c public 116.62.172.73 memTotalFree
UCD-SNMP-MIB::memTotalFree.0 = INTEGER: 83980 kB

        可以利用这些参数来监控到对应的想要的数据,更多的OID参考

        配置监控实例

01

        在添加主机的时候可以选择Template SNMP OS linux的模版,但是这个模版仅仅是提供了简单的几个监控项,这里可以自己添加监控项目。

02

        然后到最新的数据里面查看zabbix是否获取到了snmp数据。monitor–>last data–>找到主机以及相应的item

03

        其实可以发现这个是free的内存,但不是可用的内存。

        这就是一个简单的监控实例

1
2
yum -y install net-snmp net-snmp-utils net-snmp-devel
systemctl start snmpd

自定义OID

        上面添加的监控是使用定义好的OID进行值的获取,但是假如要监控的内容压根没有,那么怎么办?此时就需要自己自定义OID了。

        首先要确定某一个UID是否被系统占用

1
2
[root@aliyun-test ~]# snmpwalk -v2c -c public 116.62.172.73 .1.3.6.1.4.1.2021.5000
UCD-SNMP-MIB::ucdavis.5000 = No Such Object available on this agent at this OID

        没有背占用,写一个查看httpd进程数的脚本

1
2
3
4
5
6
[root@aliyun-test scripts]# cat http_number.sh
#!/bin/bash
apache_number=$(/bin/ps aux | grep httpd | grep -v grep | wc -l)
echo $apache_number
[root@aliyun-test scripts]# ./http_number.sh
11

        然后修改snmp的配置文件

1
2
3
[root@aliyun-test scripts]# vim /etc/snmp/snmpd.conf
加一行:
extend .1.3.6.1.4.1.2021.5000 http_number /server/scripts/http_number.sh

        重启snmp测试(最后一行是想要的数据)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@aliyun-test scripts]# snmpwalk -v2c -c public 116.62.172.73 .1.3.6.1.4.1.2021.5000
UCD-SNMP-MIB::ucdavis.5000.1.0 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.5000.2.1.2.11.104.116.116.112.95.110.117.109.98.101.114 = STRING: "/server/scripts/http_number.sh"
UCD-SNMP-MIB::ucdavis.5000.2.1.3.11.104.116.116.112.95.110.117.109.98.101.114 = ""
UCD-SNMP-MIB::ucdavis.5000.2.1.4.11.104.116.116.112.95.110.117.109.98.101.114 = ""
UCD-SNMP-MIB::ucdavis.5000.2.1.5.11.104.116.116.112.95.110.117.109.98.101.114 = INTEGER: 5
UCD-SNMP-MIB::ucdavis.5000.2.1.6.11.104.116.116.112.95.110.117.109.98.101.114 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.5000.2.1.7.11.104.116.116.112.95.110.117.109.98.101.114 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.5000.2.1.20.11.104.116.116.112.95.110.117.109.98.101.114 = INTEGER: 4
UCD-SNMP-MIB::ucdavis.5000.2.1.21.11.104.116.116.112.95.110.117.109.98.101.114 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.5000.3.1.1.11.104.116.116.112.95.110.117.109.98.101.114 = STRING: "11"
UCD-SNMP-MIB::ucdavis.5000.3.1.2.11.104.116.116.112.95.110.117.109.98.101.114 = STRING: "11"
UCD-SNMP-MIB::ucdavis.5000.3.1.3.11.104.116.116.112.95.110.117.109.98.101.114 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.5000.3.1.4.11.104.116.116.112.95.110.117.109.98.101.114 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.5000.4.1.2.11.104.116.116.112.95.110.117.109.98.101.114.1 = STRING: "11"

        添加监控项查看

04